home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / copascal.arc / COPASCAL.LIS < prev    next >
Encoding:
File List  |  1985-11-24  |  9.5 KB  |  350 lines

  1.  
  2. Listing  program ADD1( Input, Output );
  3.  # 1a
  4.          var X : integer;
  5.  
  6.          procedure p1;
  7.          var k : integer;
  8.          begin
  9.            for k := 1 to 50 do X := X + 1;
  10.          end;
  11.  
  12.          procedure p2;
  13.          var k : integer;
  14.          begin
  15.            for k := 1 to 50 do X := X + 1;
  16.          end;
  17.  
  18.          begin  { main }
  19.            X := 0;
  20.            cobegin
  21.              p1; p2
  22.            coend;
  23.            writeln( X );
  24.          end.
  25.  
  26.  
  27.          OUTPUT for 10 runs:   62  57  73  60  65  59  57  69  79  80
  28.  
  29.  
  30.  
  31. Listing  program ADD1( Input, Output );
  32.  # 1b
  33.          var X : integer;
  34.  
  35.          procedure p1;
  36.          var k : integer;
  37.          begin
  38.            for k := 1 to 50 do begin
  39.              write(' before: ', X:4 );
  40.              X := X + 1;
  41.              writeln(' After: ', X:4 );
  42.            end;
  43.          end;
  44.  
  45.          procedure p2;
  46.          var k : integer;
  47.          begin
  48.            for k := 1 to 50 do begin
  49.              write(' before: ', X:4 );
  50.              X := X + 1;
  51.              writeln(' After: ', X:4 );
  52.            end;
  53.          end;
  54.  
  55.          begin  { main }
  56.            X := 0;
  57.            cobegin
  58.              p1; p2
  59.            coend;
  60.            writeln( X );
  61.          end.
  62.  
  63.  
  64.          OUTPUT for 10 runs:   86  81  87  87  81  84  87  85  81  78
  65.  
  66.          TEXT OUTPUT for 1 run:
  67.  
  68.          before:  before:    0 after:    1
  69.          before:    1   0 after:    2
  70.          before:  after:    2   2 after:    3
  71.          before:    3
  72.          after:    4
  73.          before:    4 before:    4 after:    5
  74.          before:  after:    5
  75.          before:    5   5 after:    6
  76.          before:  after:    6
  77.            6 before:    6 after:    7 after:    7
  78.  
  79.          before:  before:    7 after:    8
  80.            7 before:  after:    9
  81.          before:    9   9 after:   10
  82.          after:   10
  83.          before:  before:   10 after:   10 after:   12
  84.          before:   11
  85.           12 after:   13
  86.          before:   13 after:   14
  87.          before:  before:   14 after:   15  15
  88.          before:   15 after:   16
  89.          before:   16 after:   17
  90.          before:   17 after:   18
  91.          after:   18 before:   18 after:
  92.          before:   19
  93.          before:   19  19 after:   20
  94.          after:  before:   21
  95.          before:   21 after:   22
  96.           21 after:   23
  97.          before:  before:   23 after:   24
  98.          before:   23 after:   25
  99.           24 after:  before:   26
  100.          before:   26 after:   27
  101.          before:   26 after:   28
  102.          before:   27  28 after:   29
  103.          before:  after:   29
  104.          before:   29  29 after:  after:   30
  105.          before:   30  30
  106.          after:   31
  107.          before:   31 before:   32 after:   32
  108.          after:   33
  109.          before:   33 before:  after:   33  34
  110.          before:  after:   35
  111.          before:   35  34 after:   36
  112.          before:   36 after:  after:   37
  113.          before:   37 after:   38
  114.          before:   38 after:   39
  115.          after:   39
  116.          before:  before:   39  39 after:  after:   40
  117.           40
  118.          before:   40 after:  before:   41 after:   41
  119.          before:   42
  120.           42 after:   43
  121.          before:   43 after:  before:   44 after:   45
  122.          before:   44
  123.          before:   45 after:   46
  124.          before:   46 after:   47
  125.           45 before:   48 after:   48
  126.          before:   48 after:   49
  127.          before:  after:   50  50
  128.          before:   50 after:   51
  129.          before:   51 after:   51
  130.          after:  before:   52  52
  131.          before:  after:   53  52
  132.          after:   54
  133.          before:  before:   54 after:   55
  134.          before:   55  54 after:  after:   56  56
  135.          before:
  136.          before:   56 after:   57
  137.           56 after:   58
  138.          before:  before:   58  58 after:  after:   60
  139.           60 before:   60
  140.          before:   60 after:   61
  141.          before:  after:   61
  142.          before:   62  62
  143.          after:  before:   63
  144.          before:   63  63 after:  after:   64
  145.          before:   64 after:   65  64
  146.          before:   65 after:   66
  147.          before:
  148.           66 before:   66 after:   67
  149.          after:   67
  150.          before:   67 before:   68 after:  after:   69
  151.           69
  152.          before:   69 after:   70 before:   70
  153.          before:   70 after:   71
  154.          before:  after:   71
  155.           71 after:   72
  156.          before:   72 after:  before:   73  73
  157.          before:   73 after:  after:   75
  158.          before:   74
  159.          before:   75  75 after:   76
  160.          before:  after:   76
  161.           76 after:   77
  162.          before:   77 after:   78
  163.          before:   78 after:   79
  164.          before:   79 after:   80
  165.          before:   80 after:   81
  166.  
  167.          final value := 81
  168.  
  169.  
  170.  
  171. Listing  program ADD2( Input, Output );
  172.  # 1c
  173.          type semaphore = integer;
  174.  
  175.          var X : integer;
  176.              s : semaphore;
  177.          
  178.          procedure p1;
  179.          var k : integer;
  180.          begin
  181.            for k := 1 to 50 do begin
  182.              WAIT(s);
  183.              X := X + 1;
  184.              SIGNAL(s);
  185.            end;
  186.          end;
  187.          
  188.          procedure p2;
  189.          var k : integer;
  190.          begin
  191.            for k := 1 to 50 do begin
  192.              WAIT(s);
  193.              X := X + 1;
  194.              SIGNAL(s);
  195.            end;
  196.          end;
  197.          
  198.          begin  { main }
  199.            X := 0;
  200.            s := 1;
  201.            cobegin
  202.              p1; p2
  203.            coend;
  204.            writeln( X );
  205.          end.   
  206.  
  207.  
  208.          OUTPUT:  100
  209.  
  210.  
  211.  
  212. Listing  program SUM_SQ1( Input, Output );
  213.  # 2
  214.          var a,b, f : integer;
  215.  
  216.          procedure SUM( var v:integer ; lo,hi : integer );
  217.          var k : integer;
  218.          begin
  219.            v := 0;
  220.            for k := lo to hi do  v := k*k + v;
  221.          end;
  222.  
  223.          begin  { main }
  224.            cobegin
  225.              SUM( a,  1,  50 );
  226.              SUM( b, 51, 100 );
  227.            coend;
  228.            f := a + b;
  229.            writeln( 'sum of the squares : ', f:1 );
  230.          end.
  231.  
  232.  
  233.          OUTPUT:  sum of the squares : 10670
  234.  
  235.  
  236.  
  237. Listing  program SUM_SQ2( Input, Output );
  238.  # 3
  239.          const n = 9;
  240.  
  241.          type semaphore = integer;
  242.  
  243.          var  aTOb : array [1..10] of semaphore;
  244.               sum  : array [1.. 9]   of integer;
  245.               s    : semaphore;
  246.               i    : integer;
  247.  
  248.          procedure SQ( x : integer );
  249.          begin
  250.            sum[x] := X*X;
  251.            SIGNAL(s);
  252.            WAIT( aTOb[x] );
  253.            if x <> 1 then write( '+');
  254.            write( sum[x]:4 );
  255.            SIGNAL( aTOb[x+1] );
  256.          end;
  257.  
  258.          procedure TOTAL;
  259.          var T,i : integer;
  260.          begin
  261.            WAIT(s);
  262.            SIGNAL( aTOb[1] );   
  263.            T := 0;
  264.            for i := 1 to n do T := T + sum[i];
  265.            WAIT( aTOb[n+1] );   
  266.            writeln( ' = ', T:1 );
  267.          end;
  268.  
  269.          begin  { main }
  270.            s := 1-n;
  271.            for i := 1 to n+1 do aTOb[i] := 0;
  272.            cobegin
  273.              SQ(1);SQ(2);SQ(3);SQ(4);SQ(5);SQ(6);SQ(7);SQ(8);SQ(9);
  274.              TOTAL
  275.            coend;
  276.          end.
  277.  
  278.  
  279.          OUTPUT:   1+   4+   9+  16+  25+  36+  49+  64+  81 = 285
  280.  
  281.  
  282.  
  283. Listing  program CigSmok( Input, Output );
  284.  # 4     const NumCig    =      10;  {  # of cigarettes for each smoker }
  285.                paper     =       1;  {      .                           }  
  286.                match     =       3;  {      .   Resources               }
  287.                tobacco   =       5;  {      .                           }
  288.  
  289.          type  semaphore = integer;
  290.                resource  = integer;
  291.          
  292.          var   S     : array[ 1..8 ] of semaphore;
  293.                alive : array[ 1..8 ] of boolean;
  294.                a     : semaphore;
  295.                k     : integer;
  296.          
  297.          function VALID( a,b : resource ): boolean;
  298.          begin
  299.            VALID := FALSE;
  300.            if ( ODD(a) AND ODD(b) AND ( a <> b ) ) then
  301.              if alive[ a+b ] then VALID := TRUE;
  302.          end;
  303.          
  304.          procedure agent;
  305.          var r1,r2 : resource;
  306.              j     : integer;
  307.          begin
  308.            for j := 1 to 3*NumCig do begin
  309.              WAIT(a);
  310.              repeat
  311.                r1 := 1 + RANDOM( 4 );
  312.                r2 := 1 + RANDOM( 4 );
  313.              until VALID( r1, r2 );
  314.              SIGNAL( S[ r1+r2 ] );
  315.            end;
  316.          end;
  317.          
  318.          procedure smoker( r3 : resource );
  319.          var i : resource;
  320.              j : integer;
  321.          begin
  322.            i := ( paper + match + tobacco ) - r3;
  323.            for j := 1 to NumCig do begin
  324.              WAIT( S[ i ] );
  325.              writeln( r3:3 );
  326.              if ( j = NumCig ) then alive[i] := FALSE;
  327.              SIGNAL(a);
  328.            end;
  329.          end;
  330.          
  331.          begin
  332.            a := 1;
  333.            for k := 1 to 8 do S[k] := 0;  { Zero Semaphore array }
  334.            for k := 1 to 8 do alive[k] := TRUE;
  335.            cobegin
  336.              agent;
  337.              smoker( paper );  smoker( match );  smoker( tobacco )
  338.            coend;
  339.          end.
  340.          
  341.          
  342.          OUTPUT:   1    4    4    4    4    4    1    1    4    1
  343.                    1    1    4    4    2    2    2    1    2    4
  344.                    4    2    1    2    2    1    1    2    2    2
  345.          
  346.          
  347.          OUTPUT:   4    4    2    4    1    1    4    4    4    2
  348.                    1    2    2    1    2    4    4    4    2    1
  349.                    4    2    1    2    2    1    1    2    1    1
  350.